WSL2環境構築(Zsh, Neovim)

WSL2環境構築(Zsh, Neovim)

なぜWSL2の環境構築をするのか

PowerShell の環境が落ち着いてきたため、次は WSL2 の環境を整備したいと思う。 昔導入していた頃、 .wslconfig みたいなファイルで制御出来なかったメモリとCPUの爆食い症状を改善して導入したいというモチベーション。

状態を確認

現在、WSL2の状態はこのようになっている。

wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu                 Stopped         2
  docker-desktop         Stopped         2
  docker-desktop-data    Stopped         2

この Ubuntu を再インストールする。

この時、停止していなければシャットダウンする。

wsl --shutdown

登録を解除

Ubuntu の登録を解除する。

wsl --unregister ubuntu
登録解除。
この操作を正しく終了しました

Windowsの機能の有効化または無効化

Windowsスタート画面の検索に「Windowsの機能の有効化または無効化」と入力すると Windowsの機能 というウィンドウが開く。 Linux用WindowsサブシステムVirtual Machine Platform のチェックを外して OK を押す。

再起動はまだしない。

インストールされているアプリでアンインストール

Ubuntu の停止と登録解除まで終わったら、次はアプリをアンインストールする。 設定を開いて アプリ > インストールされているアプリ で以下をアンインストールする。

PC再起動

反映するために再起動する。

Ubuntu の再インストール

Windowsスタート画面の検索に「Windowsの機能の有効化または無効化」と入力すると Windowsの機能 というウィンドウが開く。 Linux用WindowsサブシステムVirtual Machine Platform にチェックして OK を押す。

PC再起動

Windowsの機能の有効化または無効化 を変更すると再起動する。

Windows PowerShell を管理者権限で実行

管理者権限で以下のコマンドを実行する。

wsl --install

このコマンドで Linux用WindowsサブシステムVirtual Machine Platform もインストール出来るらしい。なのでひとつ前の手順をせずにここでインストールしても良さそう。(試してはいない)

バージョンを確認

cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

現時点で最新安定板の Ubuntu 24.04.1 LTS であることが確認出来る。

どこかの手順でユーザー名を登録したりする。

zsh --version

そもそも Zsh がまだ導入されていないことを確認する。

zsh --version

ここでバージョンが出力された場合、Zsh導入手順はスキップする。

Zsh を導入

その前に、Windows利用出来る Windows Terminal をインストールしておく。Microsoft Storeにある。

WSL2のUbuntuを起動してパッケージリストを更新する。

sudo apt update

インストールする。

sudo apt install -y zsh

バージョンを確認する。

zsh --version

現在のShellを確認

現在利用中のShellを確認する。何もしていなければ Bash のはず。

echo $SHELL

Bash から Zsh へ変更

利用するシェルを変更する。

chsh -s $(which zsh)

Windows Terminalを再起動してから、もう一度利用中のShellを確認する。

echo $SHELL

zsh compinit エラー

Deno をインストールした頃から、Zsh でWSL2を起動した際にメッセージが表示されるようになった。

zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?

このメッセージで yn を押さずにエンター連打で以下のようにした。

zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?
compinit: initialization aborted
zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?
compinit: initialization aborted
complete:13: command not found: compdef

ここで y を押してから compaudit コマンドを実行すると何も表示されない。無視される。 n にするとWSL2が終了する。なのでこちらも答えずにエンターを連打する。 この方法が正しいのかは別として私は解決した。

この状態で compaudit を確認する。

compaudit
There are insecure directories:
/home/daiki48/.zsh/completions

権限を付与する。

chmod 755 /home/daiki48/.zsh/completions

ターミナルを再起動すると、メッセージが出力されなかった。この方法で合っているのかは不明…

Neovimが導入されているか確認

次はNeovimを導入する。 その前に確認する。

nvim --version
Command 'nvim' not found, but can be installed with:
sudo snap install nvim    # version v0.10.4, or
sudo apt  install neovim  # version 0.7.2-8
See 'snap info nvim' for additional versions.

まだ見つからない。 出力を見てみると snap でNeovimをインストール出来そう?

snap --version

snapを確認する。

snap --version
snap    2.67
snapd   2.67
series  16
ubuntu  24.04
kernel  5.15.167.4-microsoft-standard-WSL2

snapでインストール出来そうなので試してみる。

sudo apt install neovim も出来るがバージョンが古い。 よって、以前までは AppImage からビルドする方法をしていた。今回もその方法でやるつもりだったが、ユニバーサルパッケージマネージャーsnapがすでにインストールされていたのでこっちを利用した方が今後のバージョン管理も楽だ。

以前導入していた Ubuntu 20 では snap 入っていなかったような…覚えてないけど…

sudo snap install nvim

早速出力されたメッセージ通りにコマンドを実行してみる。

sudo snap install nvim
error: This revision of snap "nvim" was published using classic confinement and thus may perform
       arbitrary system changes outside of the security sandbox that snaps are usually confined to,
       which may put your system at risk.

       If you understand and want to proceed repeat the command including --classic.

ダメだった。 なんか危険っぽいメッセージが表示されているが --classic オプションを付与すると出来そうなのでやってみる。

sudo snap install nvim --classic

このコマンドで出来なかったら AppImage でビルドする方法にしよう。

sudo snap install nvim --classic
2025-02-23T01:35:14+09:00 INFO Waiting for automatic snapd restart...
nvim v0.10.4 from neovim-snap (neovim-snap) installed

出来た!

zsh: command not found: nvim

インストールしたばかりなのになぜ…

どうもsnapのパスが通っていないっぽい。先駆者がいたので参考にして解決してみる。

{{ card(title=“snapでインストールしたコマンドがzshでPATH通ってない”, url=“https://qiita.com/sameyasu/items/072882ee92bca54906d8”) }}

/etc/zsh/zprofile を編集

zprofile ではデフォルトで以下の内容になっていた。

# /etc/zsh/zprofile: system-wide .zprofile file for zsh(1).
#
# This file is sourced only for login shells (i.e. shells
# invoked with "-" as the first character of argv[0], and
# shells invoked with the -l flag.)
#
# Global Order: zshenv, zprofile, zshrc, zlogin

ここに追記する。

# /etc/zsh/zprofile: system-wide .zprofile file for zsh(1).
#
# This file is sourced only for login shells (i.e. shells
# invoked with "-" as the first character of argv[0], and
# shells invoked with the -l flag.)
#
# Global Order: zshenv, zprofile, zshrc, zlogin

# Expand $PATH to include the directory where snappy applications go.
snap_bin_path="/snap/bin"
if [ -n "${PATH##*${snap_bin_path}}" -a -n "${PATH##*${snap_bin_path}:*}" ]; then
    export PATH=$PATH:${snap_bin_path}
fi

nvim --version

再度バージョンを確認する。

nvim --version
NVIM v0.10.4
Build type: RelWithDebInfo
LuaJIT 2.1.1713484068
Run "nvim -V1 -v" for more info

現時点で最新の v0.10.4 を導入出来た。

おわりに

とりあえず ZshNeovim が利用出来る環境を作った。このままでも良いが私は自分の dotfiles 環境を利用する。